﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SIPDTO;

namespace SIPDAL
{
    public class mgParametros
    {
        /// <summary>
        /// Declaracion de Variables
        /// </summary>
        SIPDataContext dc = new SIPDataContext();
        public mgParametros()
        {

        }

        /// <summary>
        /// Metodo para el registro de parámetros del sistema
        /// </summary>
        /// <param name="pers"></param>
        /// <returns></returns>
        public dtoError AceptarParametro(dtoParametros parametro, int evento)
        {
            dtoError resp = new dtoError();


            tblParametro tbparametro = new tblParametro();
            tbparametro.id_parametro = parametro.IdParametro;
            tbparametro.descripcion = parametro.Descripcion;
            tbparametro.valor = parametro.Valor; 

            try
            {
                resp = ExisteParametro(parametro);
                 if ((resp.IdError == -101) && (evento == 1))
                {
                    dc.tblParametros.InsertOnSubmit(tbparametro);
                    dc.SubmitChanges();
                    resp.Mensaje = "Información guardada correctamente.";
                    resp.IdError = 100;

                }
                if ((resp.IdError == 101) && (evento == 2))
                {
                    tblParametro param = dc.tblParametros.Single(p => p.descripcion == parametro.Descripcion);
                    param.valor = parametro.Valor; 
                    dc.SubmitChanges();
                    resp.Mensaje = "Información modificada correctamente.";
                    resp.IdError = 100;

                }
                return resp;
            }

            catch (Exception ex)
            {
                resp.IdError = -100;
                resp.Mensaje = ex.Message.ToString();
                return resp;
                throw;
            }

        }

        /// <summary>
        /// Metodo encargado de la búsqueda de párametros del sistema.
        /// </summary>
        /// <param name="pers"></param>
        /// <returns></returns>
        public dtoError ExisteParametro(dtoParametros parametro)
        {
            dtoError resp = new dtoError();

            tblParametro tbparametros = new tblParametro();
            var condicion = (from p in dc.tblParametros
                             where p.id_parametro == parametro.IdParametro
                             select p).Count();
            if (Convert.ToInt32(condicion.ToString()) > 0)
            {
                resp.Mensaje = "El parámetro ya existe en la tabla de Parámetros";
                resp.IdError = 101;

            }
            else
            {
                resp.IdError = -101;
                resp.Mensaje = "El parámetro no existe en la tabla de Parámetros";
            }
            return resp;
        }

        /// <summary>
        /// Obtiene la información del parámetro de la tabla Parámetros
        /// </summary>
        /// <param name="parametro"></param>
        /// <returns></returns>
        public List<dtoParametros> ObtenerParametro(string  parametro)
        {
            int i = 0;
            List<dtoParametros> lparametro = new List<dtoParametros>();
            try
            {

                var condicion = (from p in dc.tblParametros
                                 where p.descripcion == parametro 
                                 select p);

                foreach (tblParametro  reg in condicion)
                {
                    lparametro.Add(new dtoParametros());
                    lparametro[i].IdParametro = reg.id_parametro;
                    lparametro[i].Descripcion = reg.descripcion;
                    lparametro[i].Valor = Convert.ToInt32(reg.valor);
                    i++;
                }

            }
            catch (Exception ex)
            {
                throw new Exception("Ocurrió un error al obtener los datos " + ex.Message);
            }

            return lparametro;
        }

        ///Bautizos
        /// <summary>
        /// Realiza el registro del parámetro de matrimonio
        /// </summary>
        /// <param name="parametro"></param>
        /// <returns></returns>
        public dtoError RegistraParametroBautizo(dtoParametros parametro)
        {
            dtoError resp = new dtoError();


            tblParametrosMatrimonio tbparametro = new tblParametrosMatrimonio();
            tbparametro.id_parametro = parametro.IdParametro;
            tbparametro.descripcion = parametro.Descripcion;
            tbparametro.valor = parametro.Valor;
            tbparametro.id_parroquia = parametro.IdParroquia;
            try
            {
                resp = ExisteParametroBautizo(parametro);
                if (resp.IdError == -101)
                {
                    dc.tblParametrosMatrimonios.InsertOnSubmit(tbparametro);
                    dc.SubmitChanges();
                    resp.Mensaje = "Información guardada correctamente.";
                    resp.IdError = 100;

                }
                if (resp.IdError == 101)
                {
                    var condicion = (from p in dc.tblParametrosBautizos
                                     where p.descripcion == parametro.Descripcion &&
                                     p.id_parroquia == parametro.IdParroquia
                                     select p).ToList();

                    foreach (tblParametrosBautizo _reg in condicion)
                    {
                        _reg.valor = parametro.Valor;
                        dc.SubmitChanges();
                        resp.Mensaje = "Información modificada correctamente.";
                        resp.IdError = 100;
                    }

                }
                return resp;
            }

            catch (Exception ex)
            {
                resp.IdError = -100;
                resp.Mensaje = ex.Message.ToString();
                return resp;
                throw;
            }

        }

        /// <summary>
        /// Metodo encargado de la búsqueda de párametros de bautizo  del sistema.
        /// </summary>
        /// <param name="pers"></param>
        /// <returns></returns>
        public dtoError ExisteParametroBautizo(dtoParametros parametro)
        {
            dtoError resp = new dtoError();

            tblParametrosBautizo tbparametros = new tblParametrosBautizo();
            var condicion = (from p in dc.tblParametrosBautizos
                             where p.id_parametro == parametro.IdParametro && p.id_parroquia == parametro.IdParroquia
                             select p).Count();
            if (Convert.ToInt32(condicion.ToString()) > 0)
            {
                resp.Mensaje = "El parámetro ya existe en la tabla de parámetros de Matrimonio";
                resp.IdError = 101;

            }
            else
            {
                resp.IdError = -101;
                resp.Mensaje = "El parámetro no existe en la tabla de parámetros de Matrimonio";
            }
            return resp;
        }

        /// <summary>
        /// Obtiene la información del parámetro de la tabla Parámetros Bautizo
        /// </summary>
        /// <param name="parametro"></param>
        /// <param name="parroquia"></param>
        /// <returns></returns>
        public List<dtoParametros> ObtenerParametroBautizos(string parametro, int parroquia)
        {
            int i = 0;
            List<dtoParametros> lparametro = new List<dtoParametros>();
            try
            {

                var condicion = (from p in dc.tblParametrosBautizos
                                 where p.descripcion == parametro && p.id_parroquia == parroquia
                                 select p);

                foreach (tblParametrosBautizo reg in condicion)
                {
                    lparametro.Add(new dtoParametros());
                    lparametro[i].IdParametro = reg.id_parametro;
                    lparametro[i].Descripcion = reg.descripcion;
                    lparametro[i].Valor = Convert.ToInt32(reg.valor);
                    lparametro[i].IdParroquia = reg.id_parroquia;
                    i++;
                }

            }
            catch (Exception ex)
            {
                throw new Exception("Ocurrió un error al obtener los datos " + ex.Message);
            }

            return lparametro;
        }


        ///Matrimonio
        /// <summary>
        /// Realiza el registro del parámetro de matrimonio
        /// </summary>
        /// <param name="parametro"></param>
        /// <returns></returns>
        public dtoError RegistraParametroMatrimonio(dtoParametros parametro)
        {
            dtoError resp = new dtoError();


            tblParametrosMatrimonio tbparametro = new tblParametrosMatrimonio();
            tbparametro.id_parametro = parametro.IdParametro;
            tbparametro.descripcion = parametro.Descripcion;
            tbparametro.valor = parametro.Valor;
            tbparametro.id_parroquia = parametro.IdParroquia;
            try
            {
                resp = ExisteParametroMatrimonio(parametro);
                if (resp.IdError == -101)
                {
                    dc.tblParametrosMatrimonios.InsertOnSubmit(tbparametro);
                    dc.SubmitChanges();
                    resp.Mensaje = "Información guardada correctamente.";
                    resp.IdError = 100;

                }
                if (resp.IdError == 101)
                {
                    var condicion = (from p in dc.tblParametrosMatrimonios
                                     where p.descripcion == parametro.Descripcion &&
                                     p.id_parroquia == parametro.IdParroquia
                                     select p).ToList();

                    foreach (tblParametrosMatrimonio _reg in condicion)
                    {
                        _reg.valor = parametro.Valor;
                        dc.SubmitChanges();
                        resp.Mensaje = "Información modificada correctamente.";
                        resp.IdError = 100;
                    }

                }
                return resp;
            }

            catch (Exception ex)
            {
                resp.IdError = -100;
                resp.Mensaje = ex.Message.ToString();
                return resp;
                throw;
            }

        }

        /// <summary>
        /// Metodo encargado de la búsqueda de párametros de matrimonio  del sistema.
        /// </summary>
        /// <param name="pers"></param>
        /// <returns></returns>
        public dtoError ExisteParametroMatrimonio(dtoParametros parametro)
        {
            dtoError resp = new dtoError();

            tblParametrosMatrimonio tbparametros = new tblParametrosMatrimonio();
            var condicion = (from p in dc.tblParametrosMatrimonios
                             where p.id_parametro == parametro.IdParametro && p.id_parroquia == parametro.IdParroquia
                             select p).Count();
            if (Convert.ToInt32(condicion.ToString()) > 0)
            {
                resp.Mensaje = "El parámetro ya existe en la tabla de parámetros de Matrimonio";
                resp.IdError = 101;

            }
            else
            {
                resp.IdError = -101;
                resp.Mensaje = "El parámetro no existe en la tabla de parámetros de Matrimonio";
            }
            return resp;
        }

        /// <summary>
        /// Obtiene la información del parámetro de la tabla Parámetros Matrimonio
        /// </summary>
        /// <param name="parametro"></param>
        /// <param name="parroquia"></param>
        /// <returns></returns>
        public List<dtoParametros> ObtenerParametroMatrimonio(string parametro, int parroquia)
        {
            int i = 0;
            List<dtoParametros> lparametro = new List<dtoParametros>();
            try
            {
                var condicion = (from p in dc.tblParametrosMatrimonios
                                 where p.descripcion == parametro && p.id_parroquia == parroquia
                                 select p);

                foreach (tblParametrosMatrimonio reg in condicion)
                {
                    lparametro.Add(new dtoParametros());
                    lparametro[i].IdParametro = reg.id_parametro;
                    lparametro[i].Descripcion = reg.descripcion;
                    lparametro[i].Valor = Convert.ToInt32(reg.valor);
                    lparametro[i].IdParroquia = reg.id_parroquia;
                    i++;
                }

            }
            catch (Exception ex)
            {
                throw new Exception("Ocurrió un error al obtener los datos " + ex.Message);
            }

            return lparametro;
        }
        
        ///Confirma
        

        /// <summary>
        /// Realiza el registro del parámetro de confirma
        /// </summary>
        /// <param name="parametro"></param>
        /// <returns></returns>
        public dtoError RegistraParametroConfirma(dtoParametros parametro)
        {
            dtoError resp = new dtoError();


            tblParametrosConfirma tbparametro = new tblParametrosConfirma();
            tbparametro.id_parametro = parametro.IdParametro;
            tbparametro.descripcion = parametro.Descripcion;
            tbparametro.valor = parametro.Valor;
            tbparametro.id_parroquia = parametro.IdParroquia;
            try
            {
                resp = ExisteParametroConfirma(parametro);
                if (resp.IdError == -101)
                {
                    dc.tblParametrosConfirmas.InsertOnSubmit(tbparametro);
                    dc.SubmitChanges();
                    resp.Mensaje = "Información guardada correctamente.";
                    resp.IdError = 100;

                }
                if (resp.IdError == 101)
                {
                    var condicion = (from p in dc.tblParametrosConfirmas
                                     where p.descripcion == parametro.Descripcion &&
                                     p.id_parroquia == parametro.IdParroquia
                                     select p).ToList();

                    foreach (tblParametrosConfirma _reg in condicion)
                    {
                        _reg.valor = parametro.Valor;
                        dc.SubmitChanges();
                        resp.Mensaje = "Información modificada correctamente.";
                        resp.IdError = 100;
                    }

                }
                return resp;
            }

            catch (Exception ex)
            {
                resp.IdError = -100;
                resp.Mensaje = ex.Message.ToString();
                return resp;
                throw;
            }

        }

        /// <summary>
        /// Metodo encargado de la búsqueda de párametros de confirma  del sistema.
        /// </summary>
        /// <param name="pers"></param>
        /// <returns></returns>

        public dtoError ExisteParametroConfirma(dtoParametros parametro)
        {
            dtoError resp = new dtoError();

            tblParametrosConfirma tbparametros = new tblParametrosConfirma();
            var condicion = (from p in dc.tblParametrosConfirmas
                             where p.id_parametro == parametro.IdParametro && p.id_parroquia == parametro.IdParroquia
                             select p).Count();
            if (Convert.ToInt32(condicion.ToString()) > 0)
            {
                resp.Mensaje = "El parámetro ya existe en la tabla de parámetros de Confirma";
                resp.IdError = 101;

            }
            else
            {
                resp.IdError = -101;
                resp.Mensaje = "El parámetro no existe en la tabla de parámetros de Confirma";
            }
            return resp;
        }

        /// <summary>
        /// Obtiene la información del parámetro de la tabla Parámetros Confirma
        /// </summary>
        /// <param name="parametro"></param>
        /// <param name="parroquia"></param>
        /// <returns></returns>
        public List<dtoParametros> ObtenerParametroConfirma(string parametro, int parroquia)
        {
            int i = 0;
            List<dtoParametros> lparametro = new List<dtoParametros>();
            try
            {
                var condicion = (from p in dc.tblParametrosConfirmas
                                 where p.descripcion == parametro && p.id_parroquia == parroquia
                                 select p);

                foreach (tblParametrosConfirma reg in condicion)
                {
                    lparametro.Add(new dtoParametros());
                    lparametro[i].IdParametro = reg.id_parametro;
                    lparametro[i].Descripcion = reg.descripcion;
                    lparametro[i].Valor = Convert.ToInt32(reg.valor);
                    lparametro[i].IdParroquia = reg.id_parroquia;
                    i++;
                }

            }
            catch (Exception ex)
            {
                throw new Exception("Ocurrió un error al obtener los datos " + ex.Message);
            }

            return lparametro;
        }
    }

}
